/*
 * Copyright (C) 2020 The LINN Authors
 *
 * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
 * in compliance with the License. You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software distributed under the License
 * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
 * or implied. See the License for the specific language governing permissions and limitations under
 * the License.
 */

package com.juqimiao.linn.transfer;

/**
 * 表示通用的请求响应结果，仅用于请求返回相关操作状态，不包含数据.
 *
 * @author Collin Cai
 *
 *  Todo: 使用builder模式重写build response的过程。Completed.
 *  Todo: 需要添加管理ErrorCode的信息。
 */
public class Response extends TransferObject {

    private static final long serialVersionUID = 5192222817667233332L;

    private String errorCode;

    private String errorMessage;

    private boolean success;

    private String successfulMessage;

    /**
     * 默认构造函数。
     */
    public Response() {

    }

    /**
     * 获取错误码。
     *
     * @return 错误码。
     */
    public String getErrorCode() {
        return errorCode;
    }

    /**
     * 设置错误码。
     *
     * @param errorCode 错误码。
     */
    public void setErrorCode(String errorCode) {
        this.errorCode = errorCode;
    }

    /**
     * 获取错误描述信息。
     *
     * @return 错误描述信息。
     */
    public String getErrorMessage() {
        return errorMessage;
    }

    /**
     * 设置错误描述信息。
     *
     * @param errorMessage 错误描述信息。
     */
    public void setErrorMessage(String errorMessage) {
        this.errorMessage = errorMessage;
    }

    /**
     * 获取请求是否成功。
     *
     * @return 是否成功标志， {@link boolean}
     */
    public boolean isSuccess() {
        return success;
    }

    /**
     * 设置请求是否成功。
     *
     * @param success 是否成功标志， {@link boolean}
     */
    public void setSuccess(boolean success) {
        this.success = success;
    }

    /**
     * 设置成功状态到Response中。
     *
     * @param success           成功状态标识。
     * @param successfulMessage 成功的信息。
     */
    public void setSuccess(boolean success, String successfulMessage) {
        this.success = success;
        this.successfulMessage = successfulMessage;
    }

    /**
     * 获取成功后返回的指示信息。
     *
     * @return 成功信息
     */
    public String getSuccessfulMessage() {
        return successfulMessage;
    }

    /**
     * 设置成功后返回的指示信息。
     *
     * @return 成功信息。
     */
    public void setSuccessfulMessage(String successfulMessage) {
        this.successfulMessage = successfulMessage;
    }

    /**
     * 辅助外部设置成功状态。
     */
    public void makeSuccess(String successfulMessage) {
        if (successfulMessage == null || "".equals(successfulMessage)) {
            this.setSuccess(true);
        } else {
            this.setSuccess(true, successfulMessage);
        }
    }

    /**
     * 辅助外部设置失败状态。
     *
     * @param errorCode    错误码。
     * @param errorMessage 错误信息。
     */
    public void makeFailure(String errorCode, String errorMessage) {
        this.setSuccess(false);
        this.setErrorCode(errorCode);
        this.setErrorMessage(errorMessage);
    }
}
